package chapter02.part01;

import chapter02.FileUtil;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 读取文本
 *
 * @author insight
 * @since 2021/8/6
 */
public class TextInput {
    public static void main(String[] args) throws IOException {
        // 最简单的就是广泛使用的 Scanner
        Scanner scanner = new Scanner(System.in);
        // 也可使用 Files 的静态方法
        // 读取小文件
        String shortFile = Files.readString(Path.of(FileUtil.TEST_FILE_PATH));
        // 逐行读取
        List<String> lines =
                Files.readAllLines(Path.of(FileUtil.TEST_FILE_PATH));
        // 大文件 惰性处理
        try (Stream<String> lineStream =
                     Files.lines(Path.of(FileUtil.TEST_FILE_PATH))) {
            lineStream.filter(line -> line.length() < 10).collect(Collectors.toList());
        }
        // 使用 Scanner 读取分隔的字符串(token 符号) 默认空格分隔
        // 可以修改分隔符 支持正则
        // 使用非 Unicode 字符作为分隔符 也就是说只接收 Unicode
        scanner.useDelimiter("\\PL+");
        // 使用 next 读取下一个符号
        if (scanner.hasNext()) {
            scanner.next();
        }
        // 获取包含所有符号的流
        Stream<String> tokens = scanner.tokens();
        
        // 早期只能使用 BufferedReader 处理文本输入
        // 使用 readLine()
        try (BufferedReader reader =
                     new BufferedReader(new FileReader(FileUtil.TEST_FILE_PATH))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String s = line.toLowerCase();
            }
            // 现在 BufferedReader 可以使用 lines
            // 不过没有读取具体类型的方法
            Stream<String> readerStraem = reader.lines();
        }
    }
}